package utils

import (
	"fmt"
	"github.com/bitly/go-simplejson"
	"strings"
)

func fillReplies(conved_str *strings.Builder, reply_list []interface{}) {
	for _, reply := range reply_list {
		reply := reply.(map[string]interface{})
		nick_name := reply["nick_name"].(string)
		if len(nick_name) == 0 {
			nick_name = "作者"
		}
		conved_str.WriteString("<div class=\"reply_result js_reply_item \"><div class=\"discuss_item_hd\"><div class=\"user_info author_info\"><div class=\"nickname_wrp\"><div class=\"nickname\">")
		conved_str.WriteString(nick_name)
		conved_str.WriteString("</div></div></div></div><div class=\"discuss_message\"><div class=\"discuss_message_content js_reply_content\">")
		conved_str.WriteString(reply["content"].(string))
		conved_str.WriteString("</div></div></div>")
	}
}

func CmtConv(cmtByte []byte, cmtUrl string, conf *map[string]interface{}) string {
	convedStr := strings.Builder{}

	convedStr.WriteString("\n<!--cmt_start-->")
	convedStr.WriteString("<style>")
	convedStr.WriteString(".avatar{width:32px;height:32px;margin-right:12px;border-radius:3px;margin-top:4px}.nickname_wrp{margin-top:5px;margin-bottom:5px;color:rgba(0,0,0,.5)}.reply_result.js_reply_item{border-left:5px solid #aaa;padding-left:15px}")
	convedStr.WriteString("</style>")
	convedStr.WriteString("<div class=\"discuss_container rich_media_area_extra_inner\" id=\"js_cmt_main\" style=\"display: block;\"><br>")
	convedStr.WriteString("<div class=\"mod_title_context\"><strong class=\"mod_title\">精选留言</strong></div>")
	convedStr.WriteString("<div class=\"discuss_list_wrp\">")
	convedStr.WriteString("<ul class=\"discuss_list\" id=\"js_cmt_list\">")

	cmt_list, _ := simplejson.NewJson(cmtByte)
	elected_comments, _ := cmt_list.Get("elected_comment").Array()
	for _, cmt := range elected_comments {
		//声明这是个 map
		cmt := cmt.(map[string]interface{})
		//读者留言
		convedStr.WriteString("<li class=\"js_comment_item discuss_item\">")
		convedStr.WriteString("<div class=\"discuss_item_hd\"><div class=\"user_info\"><div class=\"nickname_wrp\">")
		convedStr.WriteString("<img class=\"avatar\" src=\"")
		convedStr.WriteString(cmt["logo_url"].(string))
		convedStr.WriteString("\"><strong class=\"nickname\">")
		convedStr.WriteString(cmt["nick_name"].(string))
		convedStr.WriteString("</strong></div></div></div>")
		convedStr.WriteString("<div class=\"discuss_message\"><span class=\"discuss_status\"></span><div class=\"discuss_message_content js_comment_content\">")
		convedStr.WriteString(cmt["content"].(string))
		convedStr.WriteString("</div></div>")
		// 这一部分留言是不点开就能直接能看到的
		reply_list_preview := cmt["reply_new"].(map[string]interface{})["reply_list"].([]interface{})
		/*
			ToDo 在这里需要增加获取多回复留言的能力
			具体而言，是把 action从getcomment替换成getcommentreply，新增键值对 max_reply_id=200， 新增键值对 content_id={elected_comment[i].content_id}，
			获取到的数据要关注 reply_list.reply_list[i].content 和 reply_list.reply_list[i].nick_name
		*/
		cmt_reply_url := strings.Replace(cmtUrl, "?action=getcomment&", "?action=getcommentreply&", 1) + fmt.Sprintf("&max_reply_id=200&content_id=%s", cmt["content_id"].(string))
		cmt_replys_byte := WxRequest(cmt_reply_url, conf, true)
		cmt_replies, _ := simplejson.NewJson(cmt_replys_byte)
		reply_list_full := cmt_replies.Get("reply_list").Get("reply_list").MustArray()
		// 由于点开全部回复后，之前能看到的留言也会再出来一次，这里要判断后者的长度，从而避免重复
		if len(reply_list_full) > 0 {
			fillReplies(&convedStr, reply_list_full)
		} else {
			fillReplies(&convedStr, reply_list_preview)
		}
		convedStr.WriteString("</li>")
	}
	convedStr.WriteString("</ul></div></div>")
	convedStr.WriteString("<!--cmt_end-->\n")
	return convedStr.String()
}
